#include "widget.h"
#include "ui_widget.h"

#include<QFile>
#include<QFileDialog>
#include<QFileInfo>
#include<QDebug>
#include<QDatetime>
#include<QDataStream>
#include<QTextStream>
#include<QBuffer>//内存对象

//全局宏调试程序好用
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //点击按钮打开文件对话框
    connect(ui->pushButton,&QPushButton::clicked,[=](){
       QString path=QFileDialog::getOpenFileName(this,"open","C:\\Users\\lindaxian\\Desktop");
       ui->lineEdit->setText(path);

       QFile file(path);
       file.open(QIODevice::ReadOnly);
       QByteArray array=file.readAll();
       ui->textEdit->setText(array);
       file.close();

//       //写文件
//       file.open(QIODevice::Append);
//       file.write("aaa");
//       file.close();

       //读取文件的信息
       QFileInfo info(path);
       qDebug()<<info.fileName()<<info.filePath()<<info.size()<<info.suffix();
       qDebug()<<info.created().toString("yyyy/MM/dd/ hh:mm:ss");

    });

    //数据流
    dataWrite();
    dataRead();
    //文本流
    textWrite();
    textRead();

    //内存对象
    QByteArray array;
    QBuffer memFile(&array);//创建内存文件
    memFile.open(QIODevice::WriteOnly);
    memFile.write("1111");
    memFile.write("222");

    memFile.close();
    //输出的特点就是把两个字符串连到一起
    qDebug()<<memFile.buffer();
    qDebug()<<array;

    //内存文件
    QBuffer memFile1;
    memFile1.open(QIODevice::WriteOnly);
    QDataStream stream(&memFile1);
    stream<<QString("laji")<<250;
    memFile1.close();

    qDebug()<<memFile1.buffer();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::dataWrite()
{
    QFile file("C:\\Users\\lindaxian\\Desktop\\aaaa.txt");

    bool isOK=file.open(QIODevice::Append);
    if(true==isOK){

        //创建数据流和file文件关联
        //往数据流中输入数据，相当于往文件里写数据,二进制方法的操作,里面的都是二进制。
        QDataStream stream(&file);
        stream<<QString("woyaokanni")<<250;

        file.close();
    }
}

void Widget::dataRead()
{
    QFile file("C:\\Users\\lindaxian\\Desktop\\aaaa.txt");

    bool isOK=file.open(QIODevice::ReadOnly);
    if(true==isOK){

        //创建数据流和file文件关联
        QDataStream stream(&file);
        QString str;
        int a ;
        stream>>str>>a;
        cout<<str.toUtf8().data()<<a;

        file.close();
    }
}

void Widget::textWrite()
{
    QFile file;
    file.setFileName("C:\\Users\\lindaxian\\Desktop\\aaaa.txt");

    bool isOK=file.open(QIODevice::WriteOnly);
    if(true==isOK){

        //创建数据流和file文件关联
        QTextStream stream(&file);
        //指定编码
        stream.setCodec("UTF-8");
        stream<<QString("bbbb")<<250;

        file.close();
    }
}

void Widget::textRead()
{
    QFile file;
    file.setFileName("C:\\Users\\lindaxian\\Desktop\\aaaa.txt");

    bool isOK=file.open(QIODevice::ReadOnly);
    if(true==isOK){

        //创建数据流和file文件关联
        QTextStream stream(&file);
        //指定编码
        stream.setCodec("UTF-8");
        QString str;
        int a;
        stream>>str.toUtf8().data()>>a;

        file.close();
    }
}
